﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Wlibros.AccesoDatos;
using System.Windows.Forms;

namespace Wlibros.LogicaNegocio
{
    class manejalibro
    {   //funcion que retorna los datos del libro
        public static Libro buscal(string busca)
        {
            LibrosEntities db = new LibrosEntities();
            
            return db.Libro.SingleOrDefault(l=>l.Titulo==busca);
        }
        //funcion q retorna los datos de ejemplar
        public static Ejemplar buscaej(int id)
        {
            LibrosEntities db = new LibrosEntities();

            return db.Ejemplar.SingleOrDefault(e=>e.idLibro == id);
        }
        //metodo agregar
        public static void agregarl(string t,string au,string p,string añ,string c,string cant)
        {
            LibrosEntities db = new LibrosEntities();
            Libro l1 = new Libro();
            Ejemplar ej = new Ejemplar();//objeto de tabla ejemplar
            

            l1.Titulo = t;
            l1.Autor = au;
            l1.Precio = Convert.ToInt32(p);
            l1.Año = Convert.ToInt32(añ);
            Categoria cate=db.Categoria.Single(ca => ca.dCategoria == c);
            l1.idCategoria = cate.idCategoria;

            ej.Cantidad = Convert.ToInt32(cant);//se le pasa cantidad
            ej.idLibro = l1.idLibro;//y el id del libro nuevo

            db.Ejemplar.Add(ej);
            db.Libro.Add(l1);
            db.SaveChanges();
        }
        //metodo eliminar
        public static void eliminarl(string tit)
        {
            LibrosEntities db = new LibrosEntities();

            Libro El = db.Libro.SingleOrDefault(e=>e.Titulo==tit);
            Ejemplar EJE = db.Ejemplar.SingleOrDefault(ej => ej.idLibro == El.idLibro);

            db.Ejemplar.Remove(EJE);
            db.Libro.Remove(El);
            db.SaveChanges();
        }
        //metodo editar
        public static void editarl(string b,string t, string au, string p, string añ,string cant)
        {
            LibrosEntities db = new LibrosEntities();
            Libro Ml = db.Libro.SingleOrDefault(m=>m.Titulo==b);
            Ejemplar Ej = db.Ejemplar.SingleOrDefault(e => e.idLibro == Ml.idLibro);

            //Libro l1 = new Libro();

            Ml.Titulo = t;
            Ml.Autor = au;
            Ml.Precio = Convert.ToInt32(p);
            Ml.Año = Convert.ToInt32(añ);
            Ej.Cantidad = Convert.ToInt32(cant);//edita cantidad en ejemplar
            db.SaveChanges();
            
        }
        //metodo limpiar
        public static void limpiarTextBox(Control parent)
        {
            foreach (Control c in parent.Controls)
            {
                if (c is TextBox)
                {
                    c.Text = "";
                }
                if (c.Controls.Count > 0)
                {
                    limpiarTextBox(c);
                }
            }

        }

        //metodo Prestar libro
        public static void agregarPrestamo(string RUT, string NOMBRE, string APELLIDO, int EDAD, string SEXO, string FONO, string EMAIL,int ID_LIBRO)
        {
            LibrosEntities db = new LibrosEntities();
            Ejemplar eje = db.Ejemplar.SingleOrDefault(e => e.idLibro == ID_LIBRO);
            Socios s = new Socios();
            s.Nombre = NOMBRE;
            s.Rut = RUT;
            s.Apellido = APELLIDO;
            s.Edad = EDAD;
            s.Sexo = SEXO;
            s.Fono = FONO;
            s.Email = EMAIL;
            db.Socios.Add(s);
            Prestamo p = new Prestamo();
            p.idLibro = ID_LIBRO;
            p.FechaPrestamo = DateTime.Now;
            p.FechaDev = DateTime.Now.AddDays(5);
            p.Rut = RUT;
            p.Estado = "Sin Entregar";
            eje.Cantidad--;
            db.Prestamo.Add(p);
            db.SaveChanges();
        }

        //comprueba si el socio ya posee un libro
        public static string EstadoDevSocio(string RUT)
        {
            LibrosEntities db = new LibrosEntities();

            Prestamo Pres = db.Prestamo.SingleOrDefault(e => e.Rut == RUT);
            //retorna el estado del libro (Entregado o Sin entregar)
            return Pres.Estado;
        }

        //comprueba si existe el socio o no po hermano XD!
        public static bool existeSocio(string RUT)
        {
            LibrosEntities db = new LibrosEntities();
            return db.Socios.Any(l => l.Rut == RUT);
        }

        public static Socios buscarSocio(string RUT)
        {
            LibrosEntities db = new LibrosEntities();

            return db.Socios.SingleOrDefault(l => l.Rut == RUT);
        }

        //me trae los valores de la tabla prestamo
        public static Prestamo buscarPrestamo(string RUT)
        {
            LibrosEntities db = new LibrosEntities();

            return db.Prestamo.SingleOrDefault(l => l.Rut == RUT);
        }

        //con esto entrego el libro
        public static void DevLibro(string RUT,int ID_LIBRO)
        {
             LibrosEntities db = new LibrosEntities();
             Prestamo Pres = db.Prestamo.SingleOrDefault(e => e.Rut == RUT);
             Ejemplar eje = db.Ejemplar.SingleOrDefault(e => e.idLibro == ID_LIBRO);
             Pres.Estado = "Entregado";
             eje.Cantidad++;
             db.SaveChanges();
        }

        public static void EditarPrestamo(int ID_LIBRO,string RUT)
        {
            LibrosEntities db = new LibrosEntities();
            Prestamo p = db.Prestamo.SingleOrDefault(m => m.Rut == RUT);
            Ejemplar eje = db.Ejemplar.SingleOrDefault(e => e.idLibro == ID_LIBRO);
            p.idLibro = ID_LIBRO;
            p.FechaPrestamo = DateTime.Now;
            p.FechaDev = DateTime.Now.AddDays(5);
            p.Estado = "Sin Entregar";
            eje.Cantidad--;
            db.SaveChanges();
        }
        
    }
}
